Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Simula</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Simula"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Simula rootpage-Simula skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Simula</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p class="mw-empty-elt">
</p>
<table class="infobox_v2 infobox infobox--frwiki noarchive">
<tbody><tr>
<td colspan="2" class="entete informatique" style="background-color:#b22222;color:black;"><span style="color: #fff;">Simula</span><style data-mw-deduplicate="TemplateStyles:r228712691">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .entete.informatique{background-image:url("./_mw_/Picto.nfo.png")}


/* end https://fr.wikipedia.org/ */
</style>
</td></tr>
<tr><td colspan="3" style="text-align:center; line-height: 1.5em;"> </td></tr>
<tr>

<td colspan="2"><hr style="height:2px; color:inherit; background-color:#b22222;"></td></tr>
<tr>
<th scope="row">Date de première version
</th>
<td><a href="1967" title="1967">1967</a>
</td>
</tr>
<tr>

<th scope="row"><a href="Paradigme_(programmation)" title="Paradigme (programmation)">Paradigmes</a>
</th>
<td><a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">Objet</a>
</td>
</tr>
<tr>
<th scope="row">Auteur
</th>
<td><a href="Ole-Johan_Dahl" title="Ole-Johan Dahl">Ole-Johan Dahl</a>, <a href="Kristen_Nygaard" title="Kristen Nygaard">Kristen Nygaard</a>
</td>
</tr>
<tr>



<th scope="row"><a href="Version_d'un_logiciel" title="Version d'un logiciel">Dernière version</a>
</th>
<td><span class="wd_p348">Standard SIMULA (<time class="nowrap date-lien" datetime="1986-08-25" data-sort-value="1986-08-25"><a href="25_ao%C3%BBt" title="25 août">25</a> <a href="Ao%C3%BBt_1986" title="Août 1986">août</a> <a href="1986" title="1986">1986</a></time>)<sup id="cite_ref-wikidata-05c585b60c3260c3b7d7661ac1f4b5f56875b87e_1-1" class="reference"><a href="#cite_note-wikidata-05c585b60c3260c3b7d7661ac1f4b5f56875b87e-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></span>
</td>
</tr>
<tr>




<th scope="row">Influencé par
</th>
<td><a href="Algol_(langage)" title="Algol (langage)">Algol 60</a>
</td>
</tr>
<tr>
<th scope="row">A influencé
</th>
<td><a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">Les langages orientés objet</a>
</td>
</tr>
<tr>








</tr>
</tbody></table>
<p><b>Simula</b> (<span class="lang-en" lang="en"><i><b>Sim</b>ple <b>u</b>niversal <b>la</b>nguage</i></span>) a été créé en <a href="1962_en_informatique" title="1962 en informatique">1962</a> sous la dénomination Simula I par Ole-Johan Dahl et Kristen Nygaard à partir d'<a href="Algol_(langage)" title="Algol (langage)">Algol 60</a>. Le langage évolua en 1967 sous le nom de Simula 67 en implémentant le premier le modèle de classe de Hoare (Record Class, <a href="Charles_Antony_Richard_Hoare" title="Charles Antony Richard Hoare">Hoare</a> 1965). Il est donc le premier langage à classes et donc le père de tous les langages à classes tels que <a href="Smalltalk" title="Smalltalk">Smalltalk</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="Java_(langage)" title="Java (langage)">Java</a>, ou encore <a href="Eiffel_(langage)" title="Eiffel (langage)">Eiffel</a>. Il inspira Dan Ingalls dans la conception de <a href="Smalltalk" title="Smalltalk">Smalltalk</a> qui introduisit la programmation orientée objet.
</p>

<div class="mw-heading mw-heading2"><h2 id="Historique">Historique</h2></div>
<p>Simula a été développé dans les <a href="Ann%C3%A9es_1960" title="Années 1960">années 1960</a> au <span class="lang-en" lang="en"><i>Norwegian Computing Centre</i></span> d'<a href="Oslo" title="Oslo">Oslo</a>, initialement par <a href="Ole-Johan_Dahl" title="Ole-Johan Dahl">Ole-Johan Dahl</a> et <a href="Kristen_Nygaard" title="Kristen Nygaard">Kristen Nygaard</a>. Syntaxiquement parlant, c'est un sur-ensemble d'<a href="Algol_(langage)" title="Algol (langage)">Algol</a>, qui ajoute à celui-ci les concepts, aujourd'hui familiers, des langages à classes comme <a href="C_plus_plus" class="mw-redirect" title="C plus plus">C++</a> ou <a href="Java_(langage)" title="Java (langage)">Java</a>, et de la <a href="Simulation_%C3%A0_%C3%A9v%C3%A9nements_discrets" title="Simulation à événements discrets">simulation à événements discrets</a>.
</p><p>Simula a été utilisé pour des applications industrielles <span class="need_ref" title="Ce passage devrait préciser au minimum la décennie ou l'année." style="cursor:help;">jusqu'à aujourd'hui</span><sup class="need_ref_tag" style="padding-left:2px;">[Quand&nbsp;?]</sup>, mais son influence historique est considérée comme plus importante que les applications qui auraient pu être développées avec lui.
</p><p>Par <i>Simula</i> on entend généralement <i>Simula 67</i>, c'est-à-dire la version de 1967, alors que la version précédente datait de 1962&nbsp;: <i>Simula <abbr class="abbr" title="1"><span class="romain" style="text-transform:uppercase">I</span></abbr></i>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Simulation_discrète"><span id="Simulation_discr.C3.A8te"></span>Simulation discrète</h2></div>
<p>Comme son nom l'indique, en plus de constituer un <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a> généraliste, Simula a été conçu de façon à contenir des bibliothèques de classes offrant un support de concepts spécifiques à la <a href="Simulation_%C3%A0_%C3%A9v%C3%A9nements_discrets" title="Simulation à événements discrets">simulation à événements discrets</a>. La classe <span class="lang-en" lang="en"><i>Process</i></span>, héritant de <i>Simulation</i> permettait ainsi à l'utilisateur d'hériter pour ses propres classes de simulation du comportement de base d'un processus pouvant s'exécuter en mode dit «&nbsp;<i>quasi-parallèle</i>&nbsp;», à l'aide du concept de <a href="Coroutine" title="Coroutine">coroutine</a>.
</p><p>Une coroutine est une routine à plusieurs points de sortie et qui, à chaque ré-entrée du flot d'exécution dans celle-ci lors d'un appel à l'instruction <i>Resume</i>, reprend son exécution à la dernière instruction où le flot l'avait précédemment quittée lors d'un appel à l'instruction <i>Detach</i>. Le point d'exécution est stocké dans le LSC&nbsp;: <span class="lang-en" lang="en"><i>Local Sequence Counter</i></span>.
</p><p>Pour clarifier le propos, le programme suivant produirait l'affichage indiqué plus bas&nbsp;:
</p>
<pre> <style data-mw-deduplicate="TemplateStyles:r216721247">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .texte-bleu{color:var(--color-progressive,#002bb8)}html.skin-theme-clientpref-day .mw-parser-output .texte-bleu{color:#002bb8}


/* end https://fr.wikipedia.org/ */
</style><span class="texte-bleu">Begin</span>
Ref(TwinProcess) firstProc, secondProc;
<span class="texte-bleu">Class</span> TwinProcess(Name);
Text Name;
<span class="texte-bleu">Begin</span>
<style data-mw-deduplicate="TemplateStyles:r216721240">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .texte-vert{color:var(--color-success,#008000)}html.skin-theme-clientpref-day .mw-parser-output .texte-vert{color:#008000}


/* end https://fr.wikipedia.org/ */
</style><span class="texte-vert">! Initial coroutine entry (creation)</span>
Ref(TwinProcess) Twin;
OutText(Name); OutText(<style data-mw-deduplicate="TemplateStyles:r216724214">
/* start https://fr.wikipedia.org/ */


.mw-parser-output .texte-gris{color:var(--color-subtle,#808080)}html.skin-theme-clientpref-day .mw-parser-output .texte-gris{color:#808080}


/* end https://fr.wikipedia.org/ */
</style><span class="texte-gris">": Creation"</span>); OutImage;
<span class="texte-vert">! First coroutine exit</span>
Detach;
<span class="texte-vert">! Second coroutine entry</span>
OutText(Name); OutText(<span class="texte-gris">": Second coroutine entry"</span>); OutImage;
<span class="texte-vert">! Second coroutine exit: switch to the twin's coroutine</span>
Resume(Twin);
<span class="texte-vert">! Last coroutine entry</span>
OutText(Name); OutText(<span class="texte-gris">": Last coroutine entry"</span>); OutImage;
Resume(Twin);
<span class="texte-bleu"> End</span>;
<span class="texte-bleu">Begin</span>
firstProc&nbsp;:- <span class="texte-bleu">New</span> TwinProcess (<span class="texte-gris">"1st Proc"</span>);
secondProc&nbsp;:- <span class="texte-bleu">New</span> TwinProcess (<span class="texte-gris">"2nd Proc"</span>);
firstProc.Twin&nbsp;:- secondProc;
secondProc.Twin&nbsp;:- firstProc;
OutText(<span class="texte-gris">"Starting"</span>); OutImage;
Resume(firstProc);
OutText(<span class="texte-gris">"End"</span>);
<span class="texte-bleu"> End</span>;
<span class="texte-bleu">End</span>;
</pre>
<p>Affichage&nbsp;:
</p>
<pre> 1st Proc: Creation
2nd Proc: Creation
Starting
1st Proc: Second coroutine entry
2nd Proc: Second coroutine entry
1st Proc: Last coroutine entry
2nd Proc: Last coroutine entry
End
</pre>
<p>La bibliothèque de simulation discrète permettait de gérer la file des processus au moyen d'instructions dédiées (<i>Activate</i>, <i>Passivate</i>, <i>Hold</i>, etc.)
</p>
<div class="mw-heading mw-heading2"><h2 id="Programmation_objet">Programmation objet</h2></div>
<p>La plupart des constructions qui permettront plus tard la réalisation des concepts principaux de la <a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">programmation orientée objet</a> sont d'ores et déjà présents dans <i>Simula 67</i>&nbsp;:
</p>
<ul><li>les <i>classes</i> comme <a href="Structure_de_donn%C3%A9es" title="Structure de données">structure de données</a> dans Simula rassemblant variables et opérations sur ces dernières (dans Simula, il représentaient des activités),</li>
<li>l'instanciation via l'instruction <i>New</i>,</li>
<li>les <i>relations</i> entre objets (ou processus dans le jargon originel de Simula) au moyen de références&nbsp;: <i>Ref( )</i> et affectation de références avec l'instruction <i>:-</i></li>
<li>référence sur l'instance courante grâce au mot clé <i>This</i></li>
<li>Test de référence nulle automatique nativement supporté <i>Inspect-Do-Otherwise</i>&nbsp;: <i>Inspect rect do Draw</i>. Ici, <i>x.Draw</i> ne sera appelé que si <i>x</i> n'est pas une référence <i>nulle</i> (mot clé&nbsp;: <i>None</i>)</li>
<li>fonctions virtuelles</li>
<li>appel de méthode par notation pointée (<i>dot-notation</i>)&nbsp;: &lt;objet&gt;.&lt;méthode&gt;</li>
<li>appel qualifié (i.e. statiquement lié) de méthodes virtuelles à l'aide de l'opérateur <i>Qua</i> ou avec <i>Inspect-When</i></li>
<li>reconnaissance de type à l'exécution (instruction <i>Inspect</i>, <i>Is</i>, <i>In</i>)</li>
<li>héritage simple entre classes</li>
<li>restriction d'accès (<i>Hidden</i>, <i>Protected</i>)</li>
<li>classes imbriquées (ou internes)</li>
<li>Imbrication sophistiquée des appels du corps de méthode de la classe via l'instruction <i>Inner</i>, qui peut ainsi permettre d'obliger l'exécution de code avant et/ou après l'exécution du corps d'une classe dérivée&nbsp;: on voit déjà se profiler le concept d'assertions, implémentées par <a href="Eiffel_(langage)" title="Eiffel (langage)">Eiffel</a> dans les <a href="Ann%C3%A9es_1980" title="Années 1980">années 1980</a>, ou même la <a href="Programmation_orient%C3%A9e_aspect" title="Programmation orientée aspect">programmation par aspect</a>, qui sera développée dans les <a href="Ann%C3%A9es_1990" title="Années 1990">années 1990</a>.</li>
<li>un <a href="Ramasse-miettes_(informatique)" title="Ramasse-miettes (informatique)">ramasse-miettes</a> en <a href="Anglais" title="Anglais">anglais</a>&nbsp;: <span class="lang-en" lang="en"><i>garbage-collector</i></span>.</li></ul>
<p>Cette liste succincte permet de prendre conscience de la <i>percée conceptuelle</i> opérée par Simula en 1967 dans le domaine des langages impératifs structurés.
</p><p>Les auteurs de Simula apportèrent une certaine confusion dans le monde de la programmation orientée objet. À l'apparition de ce nouveau paradigme avec Smalltalk, Ole Johan Dahl et Kristen Nygaard changèrent les dénominations utilisées dans Simula pour se conformer aux concepts véhiculés dans Smalltalk (classes d'objets, objets, attributs, méthodes, etc.) et déclarèrent que Simula 67 était en fait le premier langage orienté objet. Pourtant, l'approche utilisée dans Simula 67 n'est pas celle définie par Alan Kay, l'auteur de la programmation orientée objet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="references-small decimal" style=""><div class="mw-references-wrap"><ol class="references">
<li id="cite_note-wikidata-05c585b60c3260c3b7d7661ac1f4b5f56875b87e-1"><span class="reference-text"><span class="ouvrage">«&nbsp;<a rel="nofollow" class="external text" href="https://portablesimula.github.io/github.io/"><cite style="font-style:normal;">https://portablesimula.github.io/github.io/</cite></a>&nbsp;»</span></span>
</li>
</ol></div>
</div>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Articles_connexes">Articles connexes</h3></div>
<ul><li><a href="Programmation_orient%C3%A9e_objet" title="Programmation orientée objet">Programmation orientée objet</a></li>
<li>BETA (le successeur de Simula)</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Liens_externes">Liens externes</h3></div>
<p class="mw-empty-elt">
</p>
<ul><li class="mw-empty-elt"></li>
<li class="mw-empty-elt"></li>
<li><div class="liste-horizontale"><span class="wd_identifiers">Notices dans des dictionnaires ou encyclopédies généralistes</span>&nbsp;: <ul><li><a rel="nofollow" class="external text" href="https://www.britannica.com/technology/SIMULA"><i>Britannica</i></a></li> <li><a rel="nofollow" class="external text" href="https://www.ne.se/uppslagsverk/encyklopedi/lång/simula"><i>Nationalencyklopedin</i></a></li> <li><a rel="nofollow" class="external text" href="https://snl.no/Simula"><i>Store norske leksikon</i></a></li> </ul></div></li>
<li><div class="liste-horizontale"><span class="wd_identifiers"><a href="Autorit%C3%A9_(sciences_de_l'information)" title="Autorité (sciences de l'information)">Notices d'autorité</a></span>&nbsp;: <ul><li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="http://id.loc.gov/authorities/sh85122757">LCCN</a></span></li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="http://d-nb.info/gnd/4191599-9">GND</a></span></li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007546248105171">Israël</a></span></li> <li><span class="nowrap uid noarchive"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&amp;local_base=aut&amp;ccl_term=ica=ph459466">Tchéquie</a></span></li> </ul></div></li>
<li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://staff.um.edu.mt/jskl1/talk.html"><span class="lang-en" lang="en"><i>Introduction to OOP in Simula</i></span></a> – par J.Sklenar, basé sur le séminaire de 1997 «&nbsp;<span class="lang-en" lang="en"><i>30 Years of Object Oriented Programming</i></span> (OOP)&nbsp;» de l'Université de Malte</li>
<li><abbr class="abbr indicateur-langue" title="Langue : anglais">(en)</abbr> <a rel="nofollow" class="external text" href="http://heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html"><span class="lang-en" lang="en"><i>How Object-Oriented Programming Started</i></span></a> – par Dahl et Nygaard, version abrégée d'un article d'une encyclopédie sur la page du site de Nygaards.</li></ul>
<div class="navbox-container" style="clear:both;">

</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2025-05-15" href="https://fr.wikipedia.org/wiki/?title=Simula&amp;oldid=225677019">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>